package Interface.Player;

import Interface.JSelect;
import Jastermind.Appli;
import Jastermind.Data;
import Jastermind.Player;
import Various.ClosePanelAction;
import Various.VerifSaisie;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import Various.SerialisationXML;

public class JPanelModifPlayer extends JPanel {

    private JSelect selectJoueur;
    private JButton jbtSupprimer;
    private JPanel jpCardPlayers;

    public JPanelModifPlayer() {
        super();
        this.setLayout(null);
        this.setOpaque(false);

        //*********************** Dimension***********************
        //En cas d'évolution de taille
        int jElementWidth = 150;
        int jElementHeight = 20;
        int yInterval=jElementHeight+10;

        //*********************** Titre ***********************

        JLabel jblTitre = new JLabel("Modification d'un joueur ");
        jblTitre.setBounds(125, 0, 200, 20);
        this.add(jblTitre);

        //*********************** Joueur ***********************

         //Select joueur
        selectJoueur = new JSelect("Sélection du joueur ");
        selectJoueur.setBounds(125,jblTitre.getY()+yInterval,jElementWidth,jElementHeight);
        selectJoueur.setListeDonnees(Data.getUniqueInstance().getListPlayers());
        selectJoueur.addItemListener(new ActionPlayerModif());
        this.add(selectJoueur);

        //Add joueur
        JButton jbtAddJoueur = new JButton(new ImageIcon("./images/add.jpg"));
        jbtAddJoueur.setBackground(Color.WHITE);
        jbtAddJoueur.setToolTipText("Ajouter un joueur");
        jbtAddJoueur.setBounds(selectJoueur.getX() - 30, 30, 30, jElementHeight);
        jbtAddJoueur.setActionCommand("ajoutJoueur");
        jbtAddJoueur.addActionListener(new ActionPlayerModif());
        this.add(jbtAddJoueur);

        jbtSupprimer=new JButton("Supprimer");
        jbtSupprimer.setEnabled(false);
        jbtSupprimer.setBounds(125,selectJoueur.getY()+yInterval,120,30);
        jbtSupprimer.addActionListener(new ActionPlayerModif());
        this.add(jbtSupprimer);

        JButton jbtFermer=new JButton("Fermer");
        jbtFermer.setBounds(125,Appli.getJfMain().getY(),120,30);
        jbtFermer.addActionListener(new ClosePanelAction());
        this.add(jbtFermer);
        
        //*********************** Panel stats joueur ***********************

        jpCardPlayers = new JPanel();
        jpCardPlayers.setLayout(new CardLayout());
        jpCardPlayers.setBounds(0,jbtSupprimer.getY()+yInterval+10,Appli.getJfMain().getWidth(),Appli.getJfMain().getHeight()-150);
        JPanel jpNoPlayer=new JPanel();
        jpCardPlayers.add(jpNoPlayer,"noPlayer");
        for(int iPlayer=0;iPlayer<Data.getUniqueInstance().getListPlayers().size();iPlayer++){
            JPanelPlayerStats jpPlayer=new JPanelPlayerStats(Data.getUniqueInstance().getListPlayers().get(iPlayer));
            jpCardPlayers.add(jpPlayer,Data.getUniqueInstance().getListPlayers().get(iPlayer).getName());
        }
        this.add(jpCardPlayers);

    }
    //*********************** Evènements ***********************

    private class ActionPlayerModif extends KeyAdapter implements ActionListener, ItemListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("ajoutJoueur")) {
                Player.addJoueur();
                 selectJoueur.setListeDonnees(Data.getUniqueInstance().getListPlayers());
                Appli.getJfMain().setJPContent(new JPanelModifPlayer());
            }
            if (e.getActionCommand().equals("Supprimer")) {
                  ((Player)selectJoueur.getSelectedItem()).deleteJoueur();
                  SerialisationXML.saveToXml(Player.getFileName(),Data.getUniqueInstance().getListPlayers());
                  selectJoueur.setListeDonnees(Data.getUniqueInstance().getListPlayers());
            }
        }
        public void itemStateChanged(ItemEvent e) {
            CardLayout cardLayout = (CardLayout)(jpCardPlayers.getLayout());
            if (e.getStateChange() == ItemEvent.SELECTED) {
                if (VerifSaisie.isSelectOk(selectJoueur)) {
                     jbtSupprimer.setEnabled(true);
                     cardLayout.show(jpCardPlayers,((Player)selectJoueur.getSelectedItem()).getName());
                }
                else {
                     jbtSupprimer.setEnabled(false);
                    cardLayout.show(jpCardPlayers,"noPlayer");
                }
            }

        }
    }
}

